CloudWatch Logsの異常検出の異常ディテクターが存在する状態で、AWS CLIやboto3で異常ディテクターの作成処理をしたときの動作を確認する
CloudWatch Logsの異常検出を設定するとき、一括設定しようとすると、どうやらレートリミットに抵触する可能性があります。
CloudWatch Logs quotasでは言及されていませんが、CloudWatch service quotasには、anomaly detectionの記載があります。
10 TPS per Region. The maximum number of operation requests you can make per second without being throttled.
ただし、上記は「CloudWatch anomaly detection」のことであり、「Log anomaly detection」ではないと考えられます。(一方でそこまで異なる値にはならないと思います。感想ですが。)
そのため、1秒あたりのリクエスト数を考慮してスクリプトを作成してみようと思いましたが、「すでにあるDetectorを再び作成したらどうなるんだろう?」と気になったので、試してみました。
おすすめの方
- CloudWatch Logsの異常検出をAWS CLIで作成したい方
- CloudWatch Logsの異常検出をboto3で作成したい方
- すでにあるDetectorを再び作成したらどうなるか知りたい方
異常ディテクターの一覧を取得する
いくつかの異常ディテクターが存在します。
$ aws logs list-log-anomaly-detectors \ --query 'anomalyDetectors[*].detectorName' [ "lambda-2-log-anomaly-detector-sample", "/aws-glue/jobs/output", "/aws-glue/jobs/error", "/aws-glue/crawlers", "lambda-1-log-anomaly-detector-sample" ]
今回は、「lambda-1-log-anomaly-detector-sample」に対して、作成処理を試してみます。
すでにある異常ディテクターを作成してみる
AWS CLI
aws logs create-log-anomaly-detector \ --log-group-arn-list "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/lambda-log-test" \ --detector-name "lambda-1-log-anomaly-detector-sample" \ --evaluation-frequency FIFTEEN_MIN \ --anomaly-visibility-time 21
実行すると、次のエラーが発生しました。ひとつのロググループに対して、ひとつの異常ディテクターのみ作成できるようです。
An error occurred (LimitExceededException) when calling the CreateLogAnomalyDetector operation (reached max retries: 2): Found active AnomalyDetector for input logGroupArn.
boto3
import boto3 logs = boto3.client("logs") LOG_GROUP_ARN = ( "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/lambda-log-test" ) def main(): logs.create_log_anomaly_detector( logGroupArnList=[LOG_GROUP_ARN], detectorName="lambda-1-log-anomaly-detector-sample", evaluationFrequency="FIFTEEN_MIN", anomalyVisibilityTime=21, ) if __name__ == "__main__": main()
実行すると同様に次のエラーが発生しました。
botocore.errorfactory.LimitExceededException: An error occurred (LimitExceededException) when calling the CreateLogAnomalyDetector operation: Found active AnomalyDetector for input logGroupArn.
さいごに
異常ディテクター名を変更してもダメでした。CloudWatch Logsの異常ディテクターをCLIまたはboto3で作成する場合は、下記どちらかの対応をすると良いですね。
- すでに存在するかどうかを調べて、存在しない場合のみ異常ディテクターを作成する
- 問答無用で異常ディテクターを作成して、LimitExceededExceptionが発生したら無視する
参考
- CloudWatch Logs quotas - Amazon CloudWatch Logs
- CloudWatch service quotas - Amazon CloudWatch
- Using CloudWatch anomaly detection - Amazon CloudWatch
- Log anomaly detection - Amazon CloudWatch Logs
- Amazon CloudWatch Logsの異常検出をCloudFormationで設定してみた #AWSreInvent | DevelopersIO
- 既存のロググループ用の「CloudWatch Logsの異常検出を設定するCloudFormationテンプレート」を作成するスクリプトを作ってみた #AWSreInvent | DevelopersIO
- create-log-anomaly-detector — AWS CLI 1.32.21 Command Reference
- create_log_anomaly_detector - Boto3 1.34.20 documentation
- CreateLogAnomalyDetector - Amazon CloudWatch Logs